iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0
AI & Data

「AI之旅:Python、Keras、PyTorch」 - 深度學習與數據入門挑戰系列 第 5

【Day5】AI到神經網路~基本概念到Keras神經網絡

  • 分享至 

  • xImage
  •  

AI是什麼?對於大部分讀者而言應該都多少有了解,也才會來看這類型文章,而我們的目標是30天能夠學會自己建立一個模型並使用它,因此我們需要再詳細一點了解AI、機器學習、深度學習等,下面就讓我們從了解他們開始

AI到神經網路

AI人工智慧

AI(人工智慧)全名**Artificial Intelligence**,目標是讓計算機系統具備類似人類智能的能力。這包括學習、理解、解決問題、自主行動和自我改進。AI的目標是使機器能夠模仿人類的智能行為,以執行各種任務,例如從圖像識別到自駕車到作詞作曲等等...人類能做到的一切事項。

https://ithelp.ithome.com.tw/upload/images/20230920/201631845GaUO51Hwv.png

圖片來源:https://www.forbes.com/sites/tomtaulli/2019/12/07/this-years-ai-artificial-intelligence-breakthroughs/?sh=72a632706921

總的來說,AI是一個多學科的領域,它結合了計算機科學、數學、認知心理學和工程學等多個領域的知識。AI的發展已經對我們的生活和工作方式產生了深遠的影響,並在許多領域提供了新的機會和挑戰。從個人助手(如Siri和Alexa)到自動化生產線和醫療診斷,AI的應用範圍非常廣泛,並且仍在不斷擴展和演進。

用一句話簡單解釋就是希望能使電腦像人一樣來解決各種事情

機器學習 (Machine Learning)

機器學習(Machine Learning)人工智慧(AI)的一個重要子領域,它使計算機系統能夠自動從數據中學習和改進,而不需要明確的編程,機器學習基於以下主要思想:

  • 數據驅動:機器學習依賴大量的數據,從這些數據中,計算機系統可以發現模式、趨勢和信息,並從中學到知識。

  • 自動學習:目標是讓計算機能夠自動學習,而不是通過硬編程來實現特定的任務。這代表我們不需要明確告訴計算機如何執行任務,它可以自己從數據中學到如何完成任務。

  • 模型建構:在機器學習中,我們通常建立模型,這些模型是對數據的數學表示。這些模型可以是簡單的線性回歸模型,也可以是複雜的深度神經網絡。模型通過調整其參數,使其能夠更好地擬合數據。

  • 預測和決策:一旦模型訓練完成,它可以用來做出預測、分類、決策或優化,例如圖像識別、語音識別、自然語言處理、醫學診斷、金融預測等。

  • 持續改進:機器學習模型通常可以不斷改進,隨著更多的數據和反饋,它們可以不斷提高性能。這使得它們在實際應用中可以隨著時間變得更聰明。

總之,機器學習是一個達成人工智慧的方式,它可以讓計算機系統從數據中學習,進而做出更好的預測和決策。

深度學習 (Deep Learning)

深度學習(Deep Learning,DL)是機器學習的一個特殊分支,它模仿人腦的神經網絡結構,用於處理和學習複雜的數據,通過多層次的神經元結構來模擬和學習數據,就像人腦處理信息一樣。這使得深度學習在圖像識別、語音辨識、自然語言處理、自動駕駛和許多其他領域都取得了令人印象深刻的成就。

神經網路 (Neural Network)

神經網路(Neural Network,NN)許多單元組成,這些單元稱為神經元(Neuron)。神經元是模仿人腦中的神經細胞的計算單元,用於處理信息。

神經細胞圖

https://ithelp.ithome.com.tw/upload/images/20230920/20163184FD3RN6A0tf.png

圖片來源:https://zh.wikipedia.org/zh-tw/%E7%A5%9E%E7%B6%93%E5%85%83

而神經元的工作原理也如同神經細胞般,從接收來自其他神經元的輸入,對這些輸入進行權重加權,然後將加權和作為輸出傳遞給下一層的神經元或輸出層。

簡單來說神經元就像是一個開關,當它受到足夠的刺激(權重加權後的輸入大於某個閾值)時,就會打開。

神經網路構造

至此相信大家應該都大致有了概念,下面讓我們看圖
https://ithelp.ithome.com.tw/upload/images/20230920/20163184U5wYwYkWCB.png

這張是神經網路構造圖,後續各類模型都是從這概念而做延伸,下面讓我們來講這三層

  • 輸入層(input layer):神經網絡的第一層,負責接收來數據或信息,可以是圖像、文本、聲音,或者任何其他形式的數據,並將這些特徵傳遞給下一層,即隱藏層。

輸入層的大小通常取決於你的數據,例如,如果處理28x28像素的圖像,則輸入層可能有784個節點(28x28=784)。

  • 隱藏層(hidden layer):神經網絡的中間層,它被稱為"隱藏",是因為它的節點不直接與外部世界的數據或輸出相關聯。隱藏層的主要功能是處理輸入數據,並學習數據中的特徵和模式。神經網絡可以有一個或多個隱藏層,具體取決於網絡的架構。每個隱藏層通常包含多個神經元,這些神經元相互連接,並通過**權重(weights)**調整這些連接,以學習如何表示和處理數據。

  • 輸出層(output layer):神經網絡的最後一層,它負責產生最終的預測或輸出結果,輸出層的節點數取決於任務的性質,每個輸出節點代表一個可能的輸出類別或結果,並根據模型學習的知識進行預測。輸出可以是分類標籤、數值、圖像等,具體取決於你的應用。

例如,如果是圖像分類任務,則輸出層的節點數通常等於分類的類別數量。

keras

Keras是一個用於深度學習的開源軟件庫,提供了簡單而高效的界面,用於構建、訓練和部署神經網絡模型。它的主要目標是讓深度學習更加容易上手,並提供了一個直觀的API,使開發者能夠快速構建和評估深度學習模型,這也是我選擇它來作為入門的原因!
https://ithelp.ithome.com.tw/upload/images/20230920/20163184oq180glzML.png

圖片來源:https://keras.io/

PyTorch

PyTorch是一個強大且易於使用的深度學習框架,由Meta(舊稱Facebook)開發,已成為廣泛應用於機器學習和深度學習的首選工具之一。其特點包括動態計算圖、Python友好性、GPU支持、豐富的生態系統和活躍的社區支持。PyTorch可用於建立、訓練和部署各種深度學習模型,涵蓋圖像處理、自然語言處理和計算機視覺等多個領域,使深度學習變得更加容易上手。
https://ithelp.ithome.com.tw/upload/images/20230920/20163184VmXMMCUnd7.png

圖片來源:https://pytorch.org/

以上全部的大致介紹,只有一堆介紹是不是太無趣了,下面讓我們建立簡單的Keras神經網絡模型跑跑看。

keras神經網絡模型

我們建立一個基本的全連接神經網絡模型,並訓練它來分類手寫數字圖像。
而要訓練必定要有訓練資料,這裡我們使用MNIST數據集裡的手寫數字來作為我們的資料。

MNIST數據集包含70000個28x28像素手寫數字圖像,用於深度學習模型的字符識別和圖像分類。

# 引入必要的函式庫
import numpy as np
import tensorflow as tf
from tensorflow.keras import layers, models
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical

# 載入MNIST數據集
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

# 數據預處理
train_images = train_images.reshape((60000, 28, 28, 1))
test_images = test_images.reshape((10000, 28, 28, 1))
train_images = train_images.astype('float32') / 255
test_images = test_images.astype('float32') / 255
train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)

# 建立神經網絡模型
model = models.Sequential()
model.add(layers.Flatten(input_shape=(28, 28, 1)))  # 將圖像展平成一維數組
model.add(layers.Dense(512, activation='relu'))  # 512個神經元的全連接層
model.add(layers.Dense(10, activation='softmax'))  # 10個神經元的全連接層(用於10個類別的分類)

# 編譯模型
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

# 訓練模型
model.fit(train_images, train_labels, epochs=5, batch_size=64)

# 評估模型
test_loss, test_acc = model.evaluate(test_images, test_labels)
print('Test accuracy:', test_acc)

這裡我們可以選擇使用Notepad++,前面有說過如何建立一個Python的編輯檔,這裡我們說明如何執行編輯好的程式碼,首先將上面程式貼上到你的編輯檔裡,如圖
https://ithelp.ithome.com.tw/upload/images/20230921/20163184Pntg3x4Ixu.png

並且點選儲存或按ctrl + s
接下來打開你放置檔案的資料夾
https://ithelp.ithome.com.tw/upload/images/20230920/201631845cCJAez13B.png

在紅色框起來地方打上cmd
https://ithelp.ithome.com.tw/upload/images/20230920/20163184wqw9sW5UOW.png
然後Enter

再來在cmd視窗內打上

py MNIST.py

即可執行,執行完應該會如下圖

https://ithelp.ithome.com.tw/upload/images/20230920/20163184o2OLatKraB.png

cmd跑出來的結果可以看到accuracy: 0.9779,也就是準確率(accuracy)97%的意思。

啊? 是不是覺得莫名其妙就跑完了,我第一次練習範例時是這麼想的,這樣執行就訓練完了?還挺快的?
當了解後會發現後面模型越大來越大、資料越複雜,除了資料處裡變麻煩外,執行時間也越來越長(有沒有顯卡跑更跨張),每當有不同需求就要再建立符合需求的模型,不過相信打好基礎一定沒問題!(應該啦)

以上就是今天的內容,程式當中有很多前面基礎語法沒提到過的,明天我們會詳細講這模型中的細節,與一些神經網路的其他名詞,初賽每次都發現排版比起其他人我的都好亂@@,我會努力讓它好看點的/images/emoticon/emoticon06.gif,明天見!


上一篇
【Day4】Python 運算符與迴圈 裝備的最後強化!!
下一篇
【Day6】Keras 辨別手寫數字-第一個模型的說明~
系列文
「AI之旅:Python、Keras、PyTorch」 - 深度學習與數據入門挑戰22
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言